package com.demo.collection;

import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * 背景 实际业务中会遇到数据库查询的数量巨大, 需要将记录集合拆分为若干进行处理
 * @author shenguangyang
 */
public class ListPartitionTest {
    @Data
    @Builder
    @AllArgsConstructor
    public static class Order {
        private String name;
    }

    @Test
    public void test() {
        // 业务拆分部分代码
        // 1.假设从数据库查询的记录为orders
        List<Order> orders = new ArrayList<>();
        for (int i = 0; i < 15; i++) {
            orders.add(Order.builder().name(String.valueOf(i)).build());
        }
        // 2. 使用Lists进行拆分，拆分为每5个Order（这里的10表示，拆分完每个‘内’List的个数，最后一个内集合个数可能不为10）
        List<List<Order>> partition = Lists.partition(orders, 5);
        // 3.对拆分完的集合进行遍历
        for (List<Order> orderItems : partition) {
            // 4. 其他业务逻辑
            System.out.println("============================= 分组");
            for (Order orderItem : orderItems) {
                System.out.println(orderItem);
            }
        }
    }
}
